package main

import (
	"context"
	"google.golang.org/grpc"
	"learn_grpc/4_protobuf_syntax/protobuf_syntax/proto"
	"net"
)

// 业务逻辑，这里就和服务端写在一起，通常是放到handler里面的
type Server struct{}

// 在grpc的方法参数是固定格式第一个context.Context类型，第二个指针类型的请求参数。返回值为第一个指针类型的响应，第二个为error
func (s *Server) SayHello(ctx context.Context, request *proto.HelloRequest) (*proto.HelloReply, error) {
	return &proto.HelloReply{Message: "Hello " + request.Name}, nil
}

func main() {
	//服务端三步走，第一步：实例化server
	Gserver := grpc.NewServer()
	// 第二步：将业务逻辑注册到server，采用的是proto自动生成的封装注册函数
	proto.RegisterGreeterServer(Gserver, &Server{})
	//第三步： 启动server,先定义端口地址等
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		panic("listen fail" + err.Error())
	}
	err = Gserver.Serve(listener)
	if err != nil {
		panic("serve fail" + err.Error())
	}
}
